package org.lanqiao.mapdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test {
	/**
	 * 1.map集合的元素是一个键值对,以键作为存储的标识，进行散列存储
	 * 键和值的类型都是对象类型，一般采用String作为键值，值可以是任何对象类型；可以是数组、String、list
	 * 键值对：由键(key)和值组成，键和值是一一对应关系，java中用Entry抽象封装了键值对；
	 * map集合中存储了一个个键值对，也就是map中存储的是Entry对象； map可以通过通过get(key)的方式获取该key的值(value)
	 * 
	 * 2.map集合的遍历 map集合没有迭代器，但是可以获取所有键集合的迭代器，可以获得所有的Entry集合的迭代器
	 * 先取出key的set集合或者Entry的set集合，value的集合，然后再对其进行遍历
	 * 
	 * 3.HashMap实现类 底层是Hash散列存储 不可以重复 可以为null 不是有序 不是排序
	 * 
	 * 4.LinkHashMap实现类 底层是链表存储进行实现 不可以重复 可以为null 有序 不是排序
	 * 
	 * 5.TreeMap实现类 底层是树形存储进行实现 不可以重复 不可以为null 不是有序 排序
	 * 
	 * 6.HashTable实现类是HashMap的线性安全类;
	 * 
	 * 7.课下作业： 
	 * 		使用集合存储一张Excel表格内容，并进行输出显示；【要求有序】 + 
	 *      提示：使用List+Map的形式进行存储；
	 * 		map表示一行，用键值对存储该行中各列的值； 
	 *      list表示有多少行，list中存储了多少个map对象就有多少行数据；
	 * 
	 * 8.因为集合中存储的都是Object类型，使用了用父类执行子类的多态，如果需要调用子类的方法，则需要向下溯型
	 *   泛型是在使用集合时，可以指定集合可以存储的具体的子类类型；这样可以避免向下溯型的转换过程
	 *   泛型也是使用多态【父类指代子类】  
	 * 
	 * 9.集合和数组工具类
	 *   Collections是集合的工具类；Arrays是数组的工具类
	 *   集合工具类的sort方法只能对可以排序的基本类型和String类型进行排序【只有实现了Comparable接口的类才能使用sort方法进行排序】
	 *   sort还有一个重载的方法，要求提供实现了Coparator接口的比较器
	 *   也就是说，如果是自定义的类需要使用sort方法进行排序，则需要该类实现Coparable接口，或者提供实现了Comparator接口的比较器
	 *   
	 * 10.包装类:就是对基本类型的抽象封装
	 * 	8中基本类型具有对应的8种包装类
	 * 	基本类型:byte		short	int		long	float	double	char
	 *  包装类:  Byte		Short	inter   Long    Float   Double  Character
	 * 
	 * 	作用:		将8种基本类型纳入到面向对象的体系中
	 * 			集合中只存储对象类型。【有些情况下只能使用包装类，如线程同步】
	 * 	
	 * 11.自动拆箱和装箱
	 * 		装箱:基本类型可以自动默认转换为包装类类型，这一过程叫做装箱
	 * 		拆箱:将包装类型转换为基本类型，这一过程叫做拆箱
	 * 12.包装类、基本类型、String类型之间的转换
	 * 
	 *   
	 * @param args
	 */
	public static void main(String[] args) {
		test01();
	}
	
	public static void test01() {
		//创建一个map对象
		Map map0 = new HashMap();
		
		//存入元素
		map0.put("zhangsan", 20);
		map0.put("lisi", 21);
		map0.put("lisi", 21);
		map0.put(null, 21);
		map0.put("wangwu", 22);
		
		//获取元素
		map0.get("zhangsan");
		//遍历元素进行输出
		//先取出key的set集合或者Entry的Set集合，然后再对其进行遍历
		
		//通过KeySet对mp0进行遍历
		Set setKeys = map0.keySet();
		System.out.println("增强型的for循环遍历Map的Key集合：");
		
		for (Object obj : setKeys) {
			System.out.println(obj + "-" + map0.get(obj));
		}
		
		System.out.println("迭代器遍历Map的key集合:");
		//迭代器遍历
		Iterator it = setKeys.iterator();
		while(it.hasNext()) {
			//取出当前的Key
			Object key = it.next();
			System.out.println(key + "-" + map0.get(key));
		}
	}
}
